package br.ufrn.engcomp.cadastro.web;

import java.io.Serializable;
import java.util.Date;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import br.ufrn.engcomp.arq.exceptions.DAOException;
import br.ufrn.engcomp.arq.web.AbstractController;
import br.ufrn.engcomp.cadastro.dominio.Funcionario;
import br.ufrn.engcomp.cadastro.negocio.ProcessadorFuncionario;
import br.ufrn.engcomp.comum.web.CargoMBean;
import br.ufrn.engcomp.comum.web.CidadeMBean;
import br.ufrn.engcomp.comum.web.EscolaridadeMBean;
import br.ufrn.engcomp.comum.web.EstadoCivilMBean;
import br.ufrn.engcomp.comum.web.LogradouroMBean;
import br.ufrn.engcomp.comum.web.SexoMBean;
import br.ufrn.engcomp.comum.web.UfMBean;


/**
 *
 *@author claudio
 *
 */

@ManagedBean
@SessionScoped
public class FuncionarioMBean extends AbstractController<Funcionario> implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private Funcionario filtroFuncionario;
	private boolean filtroNome;
	private boolean filtroCpf;
	private boolean filtroRg;
	private boolean filtroCargo;
	private boolean filtroAll;
	
	private CargoMBean cargo;
	private CidadeMBean cidade;
	private EscolaridadeMBean escolaridade;
	private EstadoCivilMBean estadoCivil;
	private LogradouroMBean logradouro;
	private SexoMBean sexo;
	private UfMBean uf;
	
	public FuncionarioMBean() { 
		super(); 
	} 
	
	@Override 
	protected void initializeEntity() { 
		setEntidade(new Funcionario());
		
		filtroFuncionario =  new Funcionario();
		
		cargo = new CargoMBean();
		cidade = new CidadeMBean();
		escolaridade = new EscolaridadeMBean();
		estadoCivil = new EstadoCivilMBean();
		logradouro = new LogradouroMBean();
		sexo = new SexoMBean();
		uf = new UfMBean();
		
		cidade.list();
		escolaridade.list();
		estadoCivil.list();
		logradouro.list();
		sexo.list();
		uf.list();
		cargo.list();

	} 
	
	public CargoMBean getCargo() {
		return cargo;
	}

	public void setCargo(CargoMBean cargo) {
		this.cargo = cargo;
	}

	public CidadeMBean getCidade() {
		return cidade;
	}

	public void setCidade(CidadeMBean cidade) {
		this.cidade = cidade;
	}

	public EscolaridadeMBean getEscolaridade() {
		return escolaridade;
	}

	public void setEscolaridade(EscolaridadeMBean escolaridade) {
		this.escolaridade = escolaridade;
	}

	public EstadoCivilMBean getEstadoCivil() {
		return estadoCivil;
	}

	public void setEstadoCivil(EstadoCivilMBean estadoCivil) {
		this.estadoCivil = estadoCivil;
	}

	public LogradouroMBean getLogradouro() {
		return logradouro;
	}

	public void setLogradouro(LogradouroMBean logradouro) {
		this.logradouro = logradouro;
	}

	public SexoMBean getSexo() {
		return sexo;
	}

	public void setSexo(SexoMBean sexo) {
		this.sexo = sexo;
	}

	public UfMBean getUf() {
		return uf;
	}

	public void setUf(UfMBean uf) {
		this.uf = uf;
	}

	public Funcionario getFiltroFuncionario() {
		return filtroFuncionario;
	}

	public void setFiltroFuncionario(Funcionario filtroFuncionario) {
		this.filtroFuncionario = filtroFuncionario;
	}

	public boolean isFiltroNome() {
		return filtroNome;
	}

	public void setFiltroNome(boolean filtroNome) {
		this.filtroNome = filtroNome;
	}

	public boolean isFiltroCpf() {
		return filtroCpf;
	}

	public void setFiltroCpf(boolean filtroCpf) {
		this.filtroCpf = filtroCpf;
	}

	public boolean isFiltroRg() {
		return filtroRg;
	}

	public void setFiltroRg(boolean filtroRg) {
		this.filtroRg = filtroRg;
	}

	public boolean isFiltroCargo() {
		return filtroCargo;
	}

	public void setFiltroCargo(boolean filtroCargo) {
		this.filtroCargo = filtroCargo;
	}

	public boolean isFiltroAll() {
		return filtroAll;
	}

	public void setFiltroAll(boolean filtroAll) {
		this.filtroAll = filtroAll;
	}

	@Override
	public void saveOrUpdate() {
		getEntidade().setDataCadastro(new Date ());
		getEntidade().setAtivo(true);
		super.saveOrUpdate();
		forward("/sucesso.xhtml");
	}
	
	public void forwardCadastro() {
		forward("/funcionario/formFuncionario.xhtml");
	}
	
	public void forwardLista() {
		list();
		forward("/funcionario/listaFuncionario.xhtml");
	}
	
	public void actionVoltar() {
		forward("/menuPrincipal.xhtml");
	}
	
	public void actionCancelar() {
		initializeEntity();
		forward("/menuPrincipal.xhtml");
	}
	
	public void actionAlterar() {
		forward("/funcionario/formFuncionario.xhtml");
	}
	
	public void actionDeletar() {
		delete();
	}
	
	public void actionRemover() {
		delete();
		forward("/funcionario/listaFuncionario.xhtml");
	}
	
	public void actionBuscar() {
	
		ProcessadorFuncionario proc = new ProcessadorFuncionario();
		String query = "select object(a) from cadastro.funcionario as a inner join comum.pessoa as p on a.id_pessoa=p.id_pessoa where ( ";
		
		boolean isAnd = false;
		
		if (filtroAll) {
			list();
		} else {
			if (filtroNome) {
				if (isAnd) {
					query += " and ";
				}
				query += (" p.nome ilike '%" + filtroFuncionario.getPessoa().getNome() + "%'");
				isAnd = true;
			}
			if (filtroCpf) {
				if (isAnd) {
					query += " and ";
				}
				query += (" p.cpf= " + filtroFuncionario.getPessoa().getCpf());
				isAnd = true;
			}
			if (filtroRg) {
				if (isAnd) {
					query += " and ";
				}
				query += (" p.rg= " + filtroFuncionario.getPessoa().getRg());
			}
			query += ")";
			try {
				setListEntidade(proc.findBySQL(query));
			} catch (DAOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			
		}
		
		
		forward("/funcionario/listaFuncionario.xhtml");
	}
	
}
